/**
 * @description 基础数据管理器
 * @class {ProductListManager}
 * @author hhx
 * @date 2024-11-22 13:11
 * @version 0.1.2
 */
export class ProductListManager {

    /**
     * @description 商品列表
     * @private
     * @type {Array}
     */
    _productList = null;

    /**
     * @description 商品列表构造函数
     * @public
     * @constructor
     */
    constructor() {
        this.init()
    }

    //========================== 内部成员 ==========================

    /**
     * @description 获取 商品列表
     * @property
     * @protected
     * @return {Array} 商品列表
     */
    get productList() {
        return this._productList;
    }

    /**
     * @description 设置 商品列表
     * @property
     * @protected
     * @param value {Array} 商品列表
     */
    set productList(value) {
        this._productList = value;
    }

    //========================== 内部方法 ==========================

    /**
     * @description 判断是否有该商品
     * @public
     * @param id {number} 商品id
     * @return {boolean} ture 是 false 否
     */
    hasProduct(id) {
        return this.productList.some(product => {
            return product.id === id;
        });
    }

    //========================== 接口方法 ==========================

    /**
     * @description 获取商品列表
     * @public
     * @return {Array} 商品列表
     */
    getProductList() {
        return this.productList;
    }

    /**
     * @description 设置商品列表
     * @public
     * @param value {Array} 商品列表
     */
    setProductList(value) {
        this.productList = value;
    }

    /**
     * @description 添加商品
     * @public
     * @param product {object} 商品对象
     */
    addProduct(product) {
        console.log('管理器执行')
        if (!this.hasProduct(product.id)) {
            this.productList.push(product);
        }
    }

    /**
     * @description 删除商品
     * @public
     * @param id {number} 删除商品id
     */
    deleteProduct(id) {

        if (this.hasProduct(id)) {
            this.productList = this.productList.filter((product) => {
                return product.id !== id
            });
        }
    }

    //========================== 构建方法 ==========================

    /**
     * @description 初始化方法
     * @protected
     */
    init() {
        this.productList = [];
    }
}